-
Notifications
You must be signed in to change notification settings - Fork 13.3k
compiletest: Use the new non-libtest executor by default #139998
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Currently the new executor can be explicitly disabled by passing the `-N` flag to compiletest (e.g. `./x test ui -- -N`), but eventually that flag will be removed, alongside the removal of the libtest dependency.
r? @onur-ozkan rustbot has assigned @onur-ozkan. Use |
Some changes occurred in src/tools/compiletest cc @jieyouxu |
Makes sense, thanks! @bors r+ rollup |
Just in case, have you benchmarked the time to execute the UI suite between the two executors? |
With libtest:
With the new executor:
Based on a few local runs, the new executor seems to consistently be a couple of seconds slower across a 3 minute ui test run, which is a little surprising to me since it should be doing marginally less work overall. |
It's interesting that the new executor seems to be more stable. 5% slower isn't that terrible, but it would be nice to investigate more why it seems to be slower. |
Bug found in deadline detection (#139660 (comment)); I'll push a fix. @bors r- |
Let me also do a few smoke runs of the new executor on msvc in case anything funny occurs. |
I'd also mark this as rollup-never since we're changing the |
Maybe there's another issue with the deadline logic (with the // tests/ui/foo.rs
//@ run-pass
fn main() {
std::thread::sleep(std::time::Duration::from_secs(70)); // 70 to hit the libtest default slow test warning threshold of 60s
} Due to the way how the libtest-esque test filtering logic works,
|
Yeah, I'm seeing the same thing. I think it's because we don't actually remove completed tests from the deadline queue when they finish, so tests are treated as having timed out long after they have already finished. This was being masked by the other bug, which made us not emit any timeout events due to the backwards check. |
I wonder if we can come up with some kind of self-tests for this 🤔 |
Well the good news is that fixing the deadline bugs also seems to eliminate the perf difference. 😅 |
I think what I want to do here is open a separate PR to fix the deadline bugs (hopefully with some unit tests), and then we can revisit this PR once that has landed. |
Sounds good |
Separate PR to fix deadline bugs: #140031. |
The new executor was implemented in #139660, but required a manual opt-in. This PR activates the new executor by default, but leaves the old libtest-based executor in place (temporarily) to make reverting easier if something unexpectedly goes horribly wrong.
Currently the new executor can be explicitly disabled by passing the
-N
flag to compiletest (e.g../x test ui -- -N
), but eventually that flag will be removed, alongside the removal of the libtest dependency. The flag is mostly there to make manual comparative testing easier if something does go wrong.As before, there should be no user-visible difference between the old executor and the new executor.
I didn't get much of a response to my call for testing thread on Zulip, and the reports I did get (along with my own usage) indicate that there aren't any problems. So I think it's reasonable to move forward with making this the default, in the hopes of being able to remove the libtest dependency relatively soon.
When the libtest dependency is removed, it should be reasonable to build compiletest against pre-built stage0 std by default, even after the stage0 redesign. (Though we should probably have at least one CI job using in-tree stage1 std instead, to guard against the possibility of the
#![feature(internal_output_capture)]
API actually changing.)